package com.hg.util.common;

import java.util.HashMap;
import java.util.Random;
import org.jdiy.json.JsonObject;
import com.cloopen.rest.sdk.CCPRestSmsSDK;
public class SMSUtil {
	

	/**
	 * 注册发送手机验证码
	 * 
	 * @return
	 */
	public JsonObject verify(String phone) {
		JsonObject jo = new JsonObject();
		// 发送过来的手机号码
		if (!DataValidateUtil.isMobile(phone)) {
			// 验证手机号码格式是否对
			
			jo.set("result", false);
			jo.set("msg", "手机号码格式不对!");
			
			return jo;
		} else {
			// 随机生成6个整数组成的字符串
			// 发送短信验证码,并返回状态码
			
			JsonObject statusCode = sendTemplateSMS(phone);
			
			if ("000000".equals(statusCode.get("statusCode"))) {
				jo.set("result", true);
				jo.set("code",statusCode.get("code"));
				return jo;
			} else {
				jo.set("result", false);
				jo.set("msg", statusCode.get("statusMsg"));
				return jo;
			}
		}
		
	}
	
	public static void main(String[] args)
	{
		SMSUtil u = new SMSUtil();
		JsonObject jo = u.verify("13580431642");
		System.out.println(jo.toString());
	}

	public void test(){
		SMSUtil u = new SMSUtil();
		JsonObject jo = u.verify("13580431642");
		System.out.println(jo.toString());
	}
	
	/**
	 * 获取len位整数组成的字符串
	 * 
	 * @param len
	 * @return
	 */


	public String getRandom() {
		int length = 6;// 设置默认生成6个长度的验证码
		Random random = new Random();// 设置随机种子
		StringBuffer randomCode = new StringBuffer();
		for (int i = 0; i < length; i++) {
			// 取得4位数的随机字符串
			randomCode.append(String.valueOf(random.nextInt(10)));
		}
		return randomCode.toString();
	}

	/**
	 * 发送手机验证码 000000表示手机验证码成功发送
	 * 
	 * @param phone
	 * @param msg
	 * @return
	 */
	private JsonObject sendTemplateSMS(String phone) {
		JsonObject jo = new JsonObject();
		HashMap<String, Object> result = null;

		// 初始化SDK
		CCPRestSmsSDK restAPI = new CCPRestSmsSDK();

		// ******************************注释*********************************************
		// *初始化服务器地址和端口 *
		// *沙盒环境（用于应用开发调试）：restAPI.init("sandboxapp.cloopen.com", "8883");*
		// *生产环境（用户应用上线使用）：restAPI.init("app.cloopen.com", "8883"); *
		// *******************************************************************************
		restAPI.init("sandboxapp.cloopen.com", "8883");

		// ******************************注释*********************************************
		// *初始化主帐号和主帐号令牌,对应官网开发者主账号下的ACCOUNT SID和AUTH TOKEN *
		// *ACOUNT SID和AUTH TOKEN在登陆官网后，在“应用-管理控制台”中查看开发者主账号获取*
		// *参数顺序：第一个参数是ACOUNT SID，第二个参数是AUTH TOKEN。 *
		// *******************************************************************************
		restAPI.setAccount("aaf98f8953403fcf01535001879c1c9b",
				"27c35cc41a204366878a5e66fc2397c1");

		// ******************************注释*********************************************
		// *初始化应用ID *
		// *测试开发可使用“测试Demo”的APP ID，正式上线需要使用自己创建的应用的App ID *
		// *应用ID的获取：登陆官网，在“应用-应用列表”，点击应用名称，看应用详情获取APP ID*
		// *******************************************************************************
		restAPI.setAppId("8a48b5515350d1e2015354748bf20580");

		// ******************************注释****************************************************************
		// *调用发送模板短信的接口发送短信 *
		// *参数顺序说明： *
		// *第一个参数:是要发送的手机号码，可以用逗号分隔，一次最多支持100个手机号 *
		// *第二个参数:是模板ID，在平台上创建的短信模板的ID值；测试的时候可以使用系统的默认模板，id为1。 *
		// *系统默认模板的内容为“【云通讯】您使用的是云通讯短信模板，您的验证码是{1}，请于{2}分钟内正确输入”*
		// *第三个参数是要替换的内容数组。 *
		// **************************************************************************************************

		// **************************************举例说明***********************************************************************
		// *假设您用测试Demo的APP ID，则需使用默认模板ID 1，发送手机号是13800000000，传入参数为6532和5，则调用方式为
		// *
		// *result = restAPI.sendTemplateSMS("13800000000","1" ,new
		// String[]{"6532","5"}); *
		// *则13800000000手机号收到的短信内容是：【云通讯】您使用的是云通讯短信模板，您的验证码是6532，请于5分钟内正确输入 *
		// *********************************************************************************************************************
		String msg = getRandom();
/*		System.out.println("msg is "+msg);*/
		jo.set("code", msg);
		result = restAPI.sendTemplateSMS(phone, "73026", new String[] { msg,
				"5" });
/*		if ("000000".equals(result.get("statusCode"))) {
			
			final HttpSession session = WebContextFactory.get().getSession();
			System.out.println("session is "+session);
			session.setAttribute("verify", msg);
			Timer timer = new Timer();
			timer.schedule(new TimerTask() {
				public void run() {
					session.removeAttribute("verify");
				}
			}, 5*60000);// 设定指定的时间time,此处为5分钟
		}*/
		
		jo.set("statusCode", result.get("statusCode"));
		jo.set("statusMsg",result.get("statusMsg"));
		// 000000表示手机验证码成功发送
		return jo;
	}
}
